home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / MATH / MFLOAT10.ZIP / PI.C < prev    next >
C/C++ Source or Header  |  1993-04-28  |  2KB  |  81 lines

  1. /*  Here are some methods demonstrated to calculate the number pi */
  2.  
  3. extern unsigned _stklen = 40000U;
  4.  
  5. #include "mfloat.h"
  6. #include <stdio.h>
  7. #include <string.h>
  8.  
  9. int main (void)
  10. {
  11.   mfloat a, b, c, bound;
  12.   int i;
  13.   char ch[1000];
  14.  
  15.   setmantissawords(15);
  16.   getonem(bound);
  17.   ldexpm(bound, -16 * getmantissawords() - 16);
  18.   printf("                            Calculation of PI\n");
  19.   printf("                            =================\n\n\n");
  20.   printf("PI = 16 * arctan(1 / 5) - 4 * arctan(1 / 239) :\n");
  21.   equm(b,divi(multi(getonem(a),16),5));
  22.   i = 0;
  23.   do {
  24.     i++;
  25.     divi(equm(c,divi(b,25)),2*i+1);
  26.     if (i & 1) subm(a,c);
  27.     else addm(a,c);
  28.   } while (!gtm(bound,c));
  29.   subm(a,divi(multi(getonem(b),4),239));
  30.   i = 0;
  31.   do {
  32.     i++;
  33.     divi(equm(c,divi(divi(b,239),239)),2*i+1);
  34.     if (i & 1) addm(a,c);
  35.     else subm(a,c);
  36.   } while (!gtm(bound,c));
  37.   printf("%s\n\n", mftostr(ch,a,80,".F77"));
  38.   printf("*******************************************************************************\n\n");
  39.   printf("PI = 48 * arctan(1 / 18)  + 32 * arctan(1 / 57) - 20 * arctan(1 / 239) :\n");
  40.   equm(b,divi(multi(getonem(a),8),3));
  41.   i = 0;
  42.   do {
  43.     i++;
  44.     divi(equm(c,divi(b,324)),2*i+1);
  45.     if (i & 1) subm(a,c);
  46.     else addm(a,c);
  47.   } while (!gtm(bound,c));
  48.   addm(a,divi(multi(getonem(b),32),57));
  49.   i = 0;
  50.   do {
  51.     i++;
  52.     divi(equm(c,divi(b,3249)),2*i+1);
  53.     if (i & 1) subm(a,c);
  54.     else addm(a,c);
  55.   } while (!gtm(bound,c));
  56.   subm(a,divi(multi(getonem(b),20),239));
  57.   i = 0;
  58.   do {
  59.     i++;
  60.     divi(equm(c,divi(divi(b, 239), 239)), 2*i+1);
  61.     if (i & 1) addm(a,c);
  62.     else subm(a,c);
  63.   } while (!gtm(bound,c));
  64.   printf("%s\n\n", mftostr(ch,a,80,".F77"));
  65.   printf("*******************************************************************************\n\n");
  66.   printf("PI = 6 * arctan(1 / sqrt(3)) :\n");
  67.   equm(b,multi(sqrtm(multi(getonem(a),3)),2));
  68.   i = 0;
  69.   do {
  70.     i++;
  71.     divi(equm(c,divi(b,3)),2*i+1);
  72.     if (i & 1) subm(a,c);
  73.     else addm(a,c);
  74.   } while (!gtm(bound,c));
  75.   printf("%s\n\n", mftostr(ch,a,80,".F77"));
  76.   printf("*******************************************************************************\n\n");
  77.   printf("Internal PI :\n");
  78.   getpim(a);
  79.   printf("%s\n\n", mftostr(ch,a,80,".F77"));
  80.   return(0);
  81. }